<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/ajax.js"></script>
</head>

<body>

</body>
<script>
    // 构造函数本身自带方法      (对比Array.isArray())
    // Promise.all()  
    // Promise.race()  
    // Promise.allSettled()  
    // Promise.resolve()  
    // 1. 传入一个参数(非Promise实例)  => 快速返回成功状态的Promise实例,(参数会存储到实例的结果中)
    // 2. 传入一个参数(Promise实例)    => 那么Promise.resolve将不做任何修改、原封不动地返回这个实例。
    // 3. 传入的参数是一个thenable对象 (henable对象指的是具有then方法的对象  {then:function(resolve,reject)})


    // Promise.reject()  
    // 1. 传入一个参数(非Promise对象)  => 快速返回失败状态的Promise实例,(参数会存储到实例的结果中)

    // var p = new Promise(function (resolve, reject) {
    //     resolve(1);
    // })

    // 模拟封装
    Promise.myResolve = function (arg) {
        var p = new Promise(function (resolve, reject) {
            if (arg instanceof Promise) {  //参数是Promise实例
                return arg;
            } else if (arg instanceof Object) {  // 对象数据
                if (arg.then) {   // {then}  有then方法 =>  thenable
                    setTimeout(function () {
                        arg.then(resolve, reject);  // 此处也属于回调函数  => 提前规定好了请求成功和失败的状态如何改变
                    }, 0);
                } else {
                    resolve(arg);
                }
            } else {
                resolve(arg);
            }
        })
        return p;
    }

    // var i1 = isExistUser({ user: "haha123123" }); // Promise实例
    // var p = Promise.myResolve(i1);
    // console.log(p);

    // var o = { a: 1, b: 2 };
    // var p = Promise.myResolve(o);
    // console.log(p);

    // var obj = {
    //     then: function (resolve, reject) {
    //         resolve(42)
    //     }
    // }

    // var p = Promise.myResolve(obj);
    // console.log(p);



    // 官方的方法
    // var p = Promise.resolve(1);  // {<fulfilled>:1}

    // var i1 = isExistUser({ user: "haha123123" }); // Promise实例
    // var p = Promise.resolve(i1);
    // console.log(p);

    var o = { a: 1, b: 2 };
    var p = Promise.resolve(o);
    console.log(p);

    // var obj = {
    //     then: function (resolve, reject) {
    //         resolve(42);
    //     }
    // }
    // var p = Promise.resolve(obj);
    // console.log(p);

    function isExistUser(params = {}) {  //params   考虑参数可能没有也可能有多个 对象传参{user}   
        var p = new Promise(function (resolve, reject) {
            $.ajax({
                type: "get",
                url: "../php/isExistUser.php",
                data: {
                    ...params
                },
                dataType: "json",
                success: function (result) {
                    var { status, msg } = result;
                    if (status) {
                        resolve(msg);
                    } else {
                        reject(msg);
                    }
                },
                error: function (err) {
                    reject(err);    //请求失败 =>返回错误
                }
            })
        })
        return p;
    }




</script>

</html>